﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Web;
using Model;

namespace controller
{
   
	public class DBfacade
	{
		/********** ATTRIBUTES **********/
		private SqlConnection con;
		private SqlCommand cmd;
 		string connectionstring;

        DanrenSystem system;
        SqlParameter par;
    
        

		/********** CONSTRUCTOR **********/

		public DBfacade(DanrenSystem _system)
		{
            system = _system;
            connectionstring = @"Data Source=ealdb1.eal.local;Initial Catalog=EJL01_DB;Persist Security Info=True;User ID=ejl01_usr;Password=Baz1nga1"; // Denne følgende linie, fortæller adressen på databasen og hvilken catalog.
			con = new SqlConnection(connectionstring); // Definere vores SQL connection.
   			cmd = new SqlCommand();
            cmd.Connection = con;		
		}


    
        
        public IEnumerable<Medarbejder> DBLoadMedarbejderColl()
        {
            using (SqlConnection con = new SqlConnection(connectionstring))
            {
                con.Open();
                string sql = "select * from db_owner.Medarbejder";
                cmd = con.CreateCommand();
                cmd.CommandText = sql;

                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        yield return new Medarbejder
                            (
                                medarbejderId: (int)reader["medarbejderId"],
                                medarbejderNavn: (string)reader["navn"],
                                cprNr: (int)reader["cprnr"],
                                billede: (byte[])reader["billede"],
                                aktiv: (bool)reader["aktiv"],
                                ansættelsesDato: (DateTime)reader["ansættelsesDato"],
                                ansættelsesTimer: (int)reader["ansættelsesTimer"],
                                bemærkninger: (string)reader["bemærkninger"]
                         );
                    }
                }

            }
            
        }
        
        public void UpdateMedarbejder(int medarbejderId, string medarbejderNavn, int cprNr, byte[] billede, bool aktiv, DateTime ansættelsesDato, int ansættelsesTimer, string bemærkninger)
        {

         
            SqlConnection con = new SqlConnection(connectionstring);
            cmd = new SqlCommand();
            cmd.Connection = con;

            con.Open();

            cmd.Parameters.Clear();
            cmd.CommandText = "SP_RedigereMedarbejder";

            par = new SqlParameter("@medarbejderId", SqlDbType.Int);
            par.Value = medarbejderId;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@navn", SqlDbType.NVarChar);
            par.Value = medarbejderNavn;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@cprnr", SqlDbType.Int);
            par.Value = cprNr;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@billede", SqlDbType.Image);
            par.Value = billede;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@aktiv", SqlDbType.Bit);
            par.Value = aktiv;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@ansættelsesDato", SqlDbType.DateTime);
            par.Value = ansættelsesDato;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@ansættelsesTimer", SqlDbType.Int);
            par.Value = ansættelsesTimer;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@bemærkninger", SqlDbType.NVarChar);
            par.Value = bemærkninger;
            cmd.Parameters.Add(par);
            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open(); // hvis connection er lukket: så åben!!
                }
                cmd.ExecuteNonQuery();

            }
            catch (SqlException e)
            {
                throw e;
            }
 
            finally  // eksekveres altid
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close(); // hvis connection var åben: så luk!!
                }
            }

        }

  public int CreateMedarbejder(string medarbejderNavn, int cprNr, byte[] billede, bool aktiv, DateTime ansættelsesDato, int ansættelsesTimer, string bemærkninger)
        {
            int medarbejderId;
            SqlConnection con = new SqlConnection(connectionstring);
            cmd = new SqlCommand();
            cmd.Connection = con;

            con.Open();

            cmd.Parameters.Clear();
            cmd.CommandText = "SP_CreateMedarbejder";
            cmd.CommandType = CommandType.StoredProcedure;
    
            par = new SqlParameter("@medarbejderId", SqlDbType.Int);
            par.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@navn", SqlDbType.NVarChar);
            par.Value = medarbejderNavn;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@cprnr", SqlDbType.Int);
            par.Value = cprNr;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@billede", SqlDbType.Image);
            par.Value = billede;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@aktiv", SqlDbType.Bit);
            par.Value = aktiv;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@ansættelsesDato", SqlDbType.DateTime);
            par.Value = ansættelsesDato;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@ansættelsesTimer", SqlDbType.Int);
            par.Value = ansættelsesTimer;
            cmd.Parameters.Add(par);

            par = new SqlParameter("@bemærkninger", SqlDbType.NVarChar);
            par.Value = bemærkninger;
            cmd.Parameters.Add(par);

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open(); // hvis connection er lukket: så åben!!
                }
                cmd.ExecuteNonQuery();
                medarbejderId = (int)cmd.Parameters["@medarbejderId"].Value;
                
            }
            catch (SqlException e)
            {
                throw e;
            }
 
            finally  // eksekveres altid
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close(); // hvis connection var åben: så luk!!
                }
            }

            return medarbejderId;

          
			 
        }
	}
}
